// 需要编写一个add函数,希望可以对字符串和数字类型进行相加
// function sum(a1: number | string, a2: number | string): number | string {
//     return a1 + a2
// }

//上述写法是错误的
//函数重载写法
//参数的个数不同,参数的类型不同
// 需要编写两个或者以上的重载签名,再去编写一个通用的函数以及实现
function sum(a1: number, a2: number): number;
function sum(a1: string, a2: string): string;
function sum(a1: any, a2: any): any {
    return a1 + a2
}
console.log(sum(20, 30));
console.log(sum("aaa", "bbb"));

// console.log(sum({a:12},{b:"12"}));  必须符合函数的重载类型,否则报错

//联合类型和重载
// 需求:定义一个函数,可以传入字符串或者数组,获得它们的长度
// 方案1:使用联合类型来实现

function getLength(a: string|any[]){
    return a.length
}
// 方案2:实现函数重载来实现
function getLength2(a:string):number;
function getLength2(a:any[]):number;
function getLength2(a: any){
    return a.length
}

//开发,若是函数返回类型确定,就尽量使用联合类型来实现

// 函数重载是针对返回值不确定的情况下的